candy_2017 %>%
get_dupes()
No variable names specified - using all columns.
No duplicate combinations found of: Internal ID, Q1: GOING OUT?, Q2: GENDER, Q3: AGE, Q4: COUNTRY, Q5: STATE, PROVINCE, COUNTY, ETC, Q6 | 100 Grand Bar, Q6 | Anonymous brown globs that come in black and orange wrappers (a.k.a. Mary Janes), Q6 | Any full-sized candy bar, ... and 111 other variables
# did not use these
candy_2015 <- candy_2015 %>%
clean_names() %>%
rename(age = "how_old_are_you",
trick_or_treating = "are_you_going_actually_going_trick_or_treating_yourself",
brown_globs = "anonymous_brown_globs_that_come_in_black_and_orange_wrappers",
intravenous_corn_syrup = "vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein",
restaurant_candy = "candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants",
legal_tender = "cash_or_other_forms_of_legal_tender",
chick_o_sticks = "chick_o_sticks_we_don_t_know_what_that_is")
candy_2016 <- candy_2016 %>%
clean_names() %>%
rename(age = "how_old_are_you",
gender = "your_gender",
trick_or_treating = "are_you_going_actually_going_trick_or_treating_yourself",
country = "which_country_do_you_live_in",
state = "which_state_province_county_do_you_live_in",
intravenous_corn_syrup = "vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein",
restaurant_candy = "candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants",
legal_tender = "cash_or_other_forms_of_legal_tender",
chick_o_sticks = "chick_o_sticks_we_don_t_know_what_that_is")
candy_2016 <- candy_2016 %>%
rename(
brown_globes = "anonymous_brown_globs_that_come_in_black_and_orange_wrappers"
)
candy_2017 <- candy_2017 %>%
clean_names()
data_input %>%
clean_names() %>%
remove_empty(which = c("rows", "cols"))
Error in clean_names(.) : object 'data_input' not found
candy_2015 <- clean_tables(candy_2015)
candy_2016 <- clean_tables(candy_2016)
candy_2017 <- clean_tables(candy_2017)
compare_df_cols(candy_2015, candy_2016, return = "match", bind_method = "bind_rows")
names(combined_candy)
[1] "timestamp"
[2] "age"
[3] "going_out"
[4] "butterfinger"
[5] "x100_grand_bar"
[6] "brown_globs"
[7] "any_full_sized_candy_bar"
[8] "black_jacks"
[9] "bonkers"
[10] "bottle_caps"
[11] "boxo_raisins"
[12] "brach_products_not_including_candy_corn"
[13] "bubble_gum"
[14] "cadbury_creme_eggs"
[15] "candy_corn"
[16] "vials_of_pure_high_fructose_corn_syrup_for_main_lining_into_your_vein"
[17] "candy_that_is_clearly_just_the_stuff_given_out_for_free_at_restaurants"
[18] "cash_or_other_forms_of_legal_tender"
[19] "chiclets"
[20] "caramellos"
[21] "snickers"
[22] "hersheys_dark_chocolate"
[23] "dental_paraphenalia"
[24] "dots"
[25] "fuzzy_peaches"
[26] "generic_brand_acetaminophen"
[27] "glow_sticks"
[28] "broken_glow_stick"
[29] "goo_goo_clusters"
[30] "good_n_plenty"
[31] "gum_from_baseball_cards"
[32] "gummy_bears_straight_up"
[33] "creepy_religious_comics_chick_tracts"
[34] "healthy_fruit"
[35] "heath_bar"
[36] "hersheys_kisses"
[37] "hershey_s_milk_chocolate"
[38] "hugs_actual_physical_hugs"
[39] "jolly_rancher_bad_flavor"
[40] "jolly_ranchers_good_flavor"
[41] "kale_smoothie"
[42] "kinder_happy_hippo"
[43] "kit_kat"
[44] "hard_candy"
[45] "lapel_pins"
[46] "lemon_heads"
[47] "licorice"
[48] "licorice_not_black"
[49] "lindt_truffle"
[50] "lollipops"
[51] "mars"
[52] "mary_janes"
[53] "maynards"
[54] "milk_duds"
[55] "laffy_taffy"
[56] "minibags_of_chips"
[57] "joy_joy_mit_iodine"
[58] "reggie_jackson_bar"
[59] "pixy_stix"
[60] "nerds"
[61] "nestle_crunch"
[62] "nown_laters"
[63] "pencils"
[64] "milky_way"
[65] "reese_s_peanut_butter_cups"
[66] "tolberone_something_or_other"
[67] "runts"
[68] "junior_mints"
[69] "senior_mints"
[70] "mint_kisses"
[71] "mint_juleps"
[72] "mint_leaves"
[73] "peanut_m_m_s"
[74] "regular_m_ms"
[75] "mint_m_ms"
[76] "ribbon_candy"
[77] "rolos"
[78] "skittles"
[79] "smarties_american"
[80] "smarties_commonwealth"
[81] "chick_o_sticks_we_don_t_know_what_that_is"
[82] "spotted_dick"
[83] "starburst"
[84] "swedish_fish"
[85] "sweetums"
[86] "those_odd_marshmallow_circus_peanut_things"
[87] "three_musketeers"
[88] "peterson_brand_sidewalk_chalk"
[89] "peanut_butter_bars"
[90] "peanut_butter_jars"
[91] "trail_mix"
[92] "twix"
[93] "vicodin"
[94] "white_bread"
[95] "whole_wheat_anything"
[96] "york_peppermint_patties"
[97] "please_leave_any_remarks_or_comments_regarding_your_choices"
[98] "please_list_any_items_not_included_above_that_give_you_joy"
[99] "please_list_any_items_not_included_above_that_give_you_despair"
[100] "guess_the_number_of_mints_in_my_hand"
[101] "betty_or_veronica"
[102] "check_all_that_apply_i_cried_tears_of_sadness_at_the_end_of"
[103] "dress"
[104] "what_is_your_favourite_font"
[105] "if_you_squint_really_hard_the_words_intelligent_design_would_look_like"
[106] "fill_in_the_blank_imitation_is_a_form_of"
[107] "please_estimate_the_degree_s_of_separation_you_have_from_the_following_celebrities_jk_rowling"
[108] "please_estimate_the_degree_s_of_separation_you_have_from_the_following_celebrities_jj_abrams"
[109] "please_estimate_the_degree_s_of_separation_you_have_from_the_following_celebrities_beyonce"
[110] "please_estimate_the_degree_s_of_separation_you_have_from_the_following_celebrities_bieber"
[111] "please_estimate_the_degree_s_of_separation_you_have_from_the_following_celebrities_kevin_bacon"
[112] "please_estimate_the_degree_s_of_separation_you_have_from_the_following_celebrities_francis_bacon_1561_1626"
[113] "sea_salt_flavored_stuff_probably_chocolate_since_this_is_the_it_flavor_of_the_year"
[114] "necco_wafers"
[115] "day"
[116] "gender"
[117] "country"
[118] "which_state_province_county_do_you_live_in"
[119] "bonkers_the_board_game"
[120] "chardonnay"
[121] "coffee_crisp"
[122] "dove_bars"
[123] "licorice_yes_black"
[124] "mike_and_ike"
[125] "blue_m_ms"
[126] "red_m_ms"
[127] "third_party_m_ms"
[128] "mr_goodbar"
[129] "peeps"
[130] "person_of_interest_season_3_dvd_box_set_not_including_disc_4_with_hilarious_outtakes"
[131] "reeses_pieces"
[132] "sourpatch_kids_i_e_abominations_of_nature"
[133] "sweet_tarts"
[134] "sweetums_a_friend_to_diabetes"
[135] "tic_tacs"
[136] "whatchamacallit_bars"
[137] "please_leave_any_witty_snarky_or_thoughtful_remarks_or_comments_regarding_your_choices"
[138] "do_you_eat_apples_the_correct_way_east_to_west_side_to_side_or_do_you_eat_them_like_a_freak_of_nature_south_to_north_bottom_to_top"
[139] "when_you_see_the_above_image_of_the_4_different_websites_which_one_would_you_most_likely_check_out_please_be_honest"
[140] "internal_id"
[141] "state"
[142] "green_party_m_ms"
[143] "independent_m_ms"
[144] "abstained_from_m_ming"
[145] "real_housewives_of_orange_county_season_9_blue_ray"
[146] "sandwich_sized_bags_filled_with_boo_berry_crunch"
[147] "take_5"
[148] "joy_other"
[149] "despair_other"
[150] "other_comments"
[151] "x114"
[152] "media_daily_dish"
[153] "media_science"
[154] "media_espn"
[155] "media_yahoo"
[156] "click_coordinates_x_y"
axe all the rows that are not about candy - would give an accurate
count of candy ratings
names(combined_candy)
specific_candy_data <- select(combined_candy, -18, -33, -38, -41, -45, -56, -63,
-88, -93:-95, -97:-112, -119, -130, -137:-139,
-145, -148:-156)
names(specific_candy_data)
## bring all non-candy data to beginning
specific_candy_data <- specific_candy_data %>%
select(timestamp:going_out, day:which_state_province_county_do_you_live_in,
internal_id:state, everything())
## change the values of internal_id and timestamp to just the year
specific_candy_data <- specific_candy_data %>%
mutate(timestamp = as.character(timestamp)) %>%
mutate(timestamp = if_else(str_detect(timestamp, "2015-+"), "2015", "2016"))
# not sure I need this?
specific_candy_data %>%
rename(year = "timestamp")
specific_candy_data <- specific_candy_data %>%
mutate(internal_id = as.character(internal_id))
specific_candy_data <- specific_candy_data %>%
mutate(internal_id = if_else(str_detect(internal_id, "90+"), "2017", "NO YEAR"))
## merge timestamp and internal_id to create a year column
specific_candy_data <- specific_candy_data %>%
unite("year", timestamp, internal_id, na.rm = TRUE) %>%
mutate(year = na_if(year, ""))
## dont think i need this bit now
mutate(year = recode(year, "2015_NA" = "2015", "2016_NA" = "2016", "2017_NA" = "2017"))
#### NEED TO FIX year to not include NA_2017 ####
## merge state with which state...
specific_candy_data <- specific_candy_data %>%
unite("state_county", state, which_state_province_county_do_you_live_in, na.rm = TRUE) %>%
mutate(state_county = na_if(state_county, ""))
specific_candy_data
count all sweet ratings/reviews
- do this by summarise across the columns you want.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CgpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShqYW5pdG9yKQpsaWJyYXJ5KHN0cmluZ3IpCgoKbmFtZXMoY2FuZHlfMjAxNSkKbmFtZXMoY2FuZHlfMjAxNikKbmFtZXMoY2FuZHlfMjAxNykKCgp2aWV3KGNhbmR5XzIwMTUpCnZpZXcoY2FuZHlfMjAxNikKdmlldyhjYW5keV8yMDE3KQoKY2FuZHlfMjAxNSAlPiUgCiAgZ2V0X2R1cGVzKCkKCmNhbmR5XzIwMTYgJT4lIAogIGdldF9kdXBlcygpCgpjYW5keV8yMDE3ICU+JSAKICBnZXRfZHVwZXMoKQoKCgpgYGAKCmBgYHtyfQoKIyBkaWQgbm90IHVzZSB0aGVzZQoKY2FuZHlfMjAxNSA8LSBjYW5keV8yMDE1ICU+JSAKICBjbGVhbl9uYW1lcygpICU+JSAKICByZW5hbWUoYWdlID0gImhvd19vbGRfYXJlX3lvdSIsCiAgICAgICAgIHRyaWNrX29yX3RyZWF0aW5nID0gImFyZV95b3VfZ29pbmdfYWN0dWFsbHlfZ29pbmdfdHJpY2tfb3JfdHJlYXRpbmdfeW91cnNlbGYiLAogICAgICAgICBicm93bl9nbG9icyA9ICJhbm9ueW1vdXNfYnJvd25fZ2xvYnNfdGhhdF9jb21lX2luX2JsYWNrX2FuZF9vcmFuZ2Vfd3JhcHBlcnMiLAogICAgICAgICBpbnRyYXZlbm91c19jb3JuX3N5cnVwID0gInZpYWxzX29mX3B1cmVfaGlnaF9mcnVjdG9zZV9jb3JuX3N5cnVwX2Zvcl9tYWluX2xpbmluZ19pbnRvX3lvdXJfdmVpbiIsCiAgICAgICAgIHJlc3RhdXJhbnRfY2FuZHkgPSAiY2FuZHlfdGhhdF9pc19jbGVhcmx5X2p1c3RfdGhlX3N0dWZmX2dpdmVuX291dF9mb3JfZnJlZV9hdF9yZXN0YXVyYW50cyIsCiAgICAgICAgIGxlZ2FsX3RlbmRlciA9ICJjYXNoX29yX290aGVyX2Zvcm1zX29mX2xlZ2FsX3RlbmRlciIsCiAgICAgICAgIGNoaWNrX29fc3RpY2tzID0gImNoaWNrX29fc3RpY2tzX3dlX2Rvbl90X2tub3dfd2hhdF90aGF0X2lzIikKCmNhbmR5XzIwMTYgPC0gY2FuZHlfMjAxNiAlPiUgCiAgY2xlYW5fbmFtZXMoKSAlPiUgCiAgcmVuYW1lKGFnZSA9ICJob3dfb2xkX2FyZV95b3UiLAogICAgICAgICBnZW5kZXIgPSAieW91cl9nZW5kZXIiLAogICAgICAgICB0cmlja19vcl90cmVhdGluZyA9ICJhcmVfeW91X2dvaW5nX2FjdHVhbGx5X2dvaW5nX3RyaWNrX29yX3RyZWF0aW5nX3lvdXJzZWxmIiwKICAgICAgICAgY291bnRyeSA9ICJ3aGljaF9jb3VudHJ5X2RvX3lvdV9saXZlX2luIiwKICAgICAgICAgc3RhdGUgPSAid2hpY2hfc3RhdGVfcHJvdmluY2VfY291bnR5X2RvX3lvdV9saXZlX2luIiwKICAgICAgICAgaW50cmF2ZW5vdXNfY29ybl9zeXJ1cCA9ICJ2aWFsc19vZl9wdXJlX2hpZ2hfZnJ1Y3Rvc2VfY29ybl9zeXJ1cF9mb3JfbWFpbl9saW5pbmdfaW50b195b3VyX3ZlaW4iLAogICAgICAgICByZXN0YXVyYW50X2NhbmR5ID0gImNhbmR5X3RoYXRfaXNfY2xlYXJseV9qdXN0X3RoZV9zdHVmZl9naXZlbl9vdXRfZm9yX2ZyZWVfYXRfcmVzdGF1cmFudHMiLAogICAgICAgICBsZWdhbF90ZW5kZXIgPSAiY2FzaF9vcl9vdGhlcl9mb3Jtc19vZl9sZWdhbF90ZW5kZXIiLAogICAgICAgICBjaGlja19vX3N0aWNrcyA9ICJjaGlja19vX3N0aWNrc193ZV9kb25fdF9rbm93X3doYXRfdGhhdF9pcyIpCgpjYW5keV8yMDE2IDwtIGNhbmR5XzIwMTYgJT4lIAogICByZW5hbWUoCiAgICAgYnJvd25fZ2xvYmVzID0gImFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVycyIKICAgICApCgpjYW5keV8yMDE3IDwtIGNhbmR5XzIwMTcgJT4lIAogIGNsZWFuX25hbWVzKCkKCmBgYAoKCmBgYHtyfQoKY2xlYW5fdGFibGVzIDwtIGZ1bmN0aW9uKGRhdGFfaW5wdXQpewogIGRhdGFfaW5wdXQgJT4lIAogICAgY2xlYW5fbmFtZXMoKSAlPiUKICAgIHJlbW92ZV9lbXB0eSh3aGljaCA9IGMoInJvd3MiLCAiY29scyIpKQp9CmBgYAoKYGBge3J9CgpjYW5keV8yMDE1IDwtIGNsZWFuX3RhYmxlcyhjYW5keV8yMDE1KQpjYW5keV8yMDE2IDwtIGNsZWFuX3RhYmxlcyhjYW5keV8yMDE2KQpjYW5keV8yMDE3IDwtIGNsZWFuX3RhYmxlcyhjYW5keV8yMDE3KQpgYGAKCmBgYHtyfQp2aWV3KGNhbmR5XzIwMTUpCnZpZXcoY2FuZHlfMjAxNikKdmlldyhjYW5keV8yMDE3KQoKIyMgaW5jbHVkZSB0aGlzIHdpdGggdGhlIG90aGVyIDIwMTcgY2xlYW5pbmcKCnBhdHRlcm4gPC0gInErWzAtOV0rXyIKCmNhbmR5XzIwMTcgPC0gY2FuZHlfMjAxNyAlPiUgCiAgY2xlYW5fbmFtZXMoKSAlPiUgCiAgcmVuYW1lX3dpdGgofiBnc3ViKHBhdHRlcm4sICIiLCAueCkpICU+JSAKICByZW5hbWUoeDEwMF9ncmFuZF9iYXIgPSAiMTAwX2dyYW5kX2JhciIsIAogICAgICAgICBzdGF0ZSA9ICJzdGF0ZV9wcm92aW5jZV9jb3VudHlfZXRjIiwKICAgICAgICAgKQoKdmlldyhjYW5keV8yMDE1KQp2aWV3KGNhbmR5XzIwMTYpCnZpZXcoY2FuZHlfMjAxNykKCmBgYAoKYGBge3J9CmNvbXBhcmVfZGZfY29scyhjYW5keV8yMDE1LCBjYW5keV8yMDE2LCByZXR1cm4gPSAibWF0Y2giLCBiaW5kX21ldGhvZCA9ICJiaW5kX3Jvd3MiKQpgYGAKCmBgYHtyfQpjaGFuZ2VfbmFtZXMgPC0gZnVuY3Rpb24oZGF0YV9pbnB1dCl7CiAgZGF0YV9pbnB1dCAlPiUgCiAgICByZW5hbWUoZ29pbmdfb3V0ID0gImFyZV95b3VfZ29pbmdfYWN0dWFsbHlfZ29pbmdfdHJpY2tfb3JfdHJlYXRpbmdfeW91cnNlbGYiLAogICAgICAgICAgIGFnZSA9ICJob3dfb2xkX2FyZV95b3UiLAogICAgICAgICAgIGJyb3duX2dsb2JzID0gImFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVycyIsCiAgICAgICAgICAgKQp9CgpjYW5keV8yMDE1IDwtIGNoYW5nZV9uYW1lcyhjYW5keV8yMDE1KQpjYW5keV8yMDE2IDwtIGNoYW5nZV9uYW1lcyhjYW5keV8yMDE2KQoKY2FuZHlfMjAxNiA8LSBjYW5keV8yMDE2ICU+JSAKICByZW5hbWUoYm9ua2VycyA9ICJib25rZXJzX3RoZV9jYW5keSIKICAgICAgICAgKQoKY2FuZHlfMjAxNSA8LSBjYW5keV8yMDE1ICU+JSAKICByZW5hbWUoYm94b19yYWlzaW5zID0gImJveF9vX3JhaXNpbnMiLAogICAgICAgICBoZXJzaGV5c19kYXJrX2Nob2NvbGF0ZSA9ICJkYXJrX2Nob2NvbGF0ZV9oZXJzaGV5IiwKICAgICAgICAgKQoKY2FuZHlfMjAxNSA8LSBjYW5keV8yMDE1ICU+JSAKICByZW5hbWUoaGVyc2hleXNfa2lzc2VzID0gImhlcnNoZXlfc19raXNzYWJsZXMiKQoKIyMgZG9udCBuZWVkIHRoZXNlIHR3byBhcyB0aGV5cmUgbm90IGNhbmR5IHNvIGdldCBkaXNjYXJkZWQgYW55d2F5CgpjYW5keV8yMDE2IDwtIGNhbmR5XzIwMTYgJT4lIAogIHJlbmFtZShkcmVzcyA9ICJ0aGF0X2RyZXNzX3RoYXRfd2VudF92aXJhbF9hX2Zld195ZWFyc19iYWNrX3doZW5faV9maXJzdF9zYXdfaXRfaXRfd2FzIikKCmNhbmR5XzIwMTUgPC0gY2FuZHlfMjAxNSAlPiUgCiAgcmVuYW1lKGRyZXNzID0gInRoYXRfZHJlc3NfdGhhdF93ZW50X3ZpcmFsX2Vhcmx5X3RoaXNfeWVhcl93aGVuX2lfZmlyc3Rfc2F3X2l0X2l0X3dhcyIpCgoKCmBgYAoKYGBge3J9CgpkYXRhXzIwMTVfMjAxNiA8LSBiaW5kX3Jvd3MoY2FuZHlfMjAxNSwgY2FuZHlfMjAxNikKYGBgCgpgYGB7cn0KdmlldyhkYXRhXzIwMTVfMjAxNikKCmNvbXBhcmVfZGZfY29scyhkYXRhXzIwMTVfMjAxNiwgY2FuZHlfMjAxNywgcmV0dXJuID0gIm1pc21hdGNoIiwgYmluZF9tZXRob2QgPSAicmJpbmQiKQpgYGAKCmBgYHtyfQpjYW5keV8yMDE3IDwtIGNhbmR5XzIwMTcgJT4lIAogIHJlbmFtZSgKICAgIGJyb3duX2dsb2JzID0gImFub255bW91c19icm93bl9nbG9ic190aGF0X2NvbWVfaW5fYmxhY2tfYW5kX29yYW5nZV93cmFwcGVyc19hX2tfYV9tYXJ5X2phbmVzIiwKICAgIGJvbmtlcnMgPSAiYm9ua2Vyc190aGVfY2FuZHkiCiAgKQoKZGF0YV8yMDE1XzIwMTYgPC0gZGF0YV8yMDE1XzIwMTYgJT4lIAogIHJlbmFtZSgKICAgIGNvdW50cnkgPSAid2hpY2hfY291bnRyeV9kb195b3VfbGl2ZV9pbiIsCiAgICBkYXkgPSAid2hpY2hfZGF5X2RvX3lvdV9wcmVmZXJfZnJpZGF5X29yX3N1bmRheSIsCiAgICBnZW5kZXIgPSAieW91cl9nZW5kZXIiCiAgKQpgYGAKCmBgYHtyfQpjb21iaW5lZF9jYW5keSA8LSBiaW5kX3Jvd3MoZGF0YV8yMDE1XzIwMTYsIGNhbmR5XzIwMTcpCgpuYW1lcyhjb21iaW5lZF9jYW5keSkKdmlldyhjb21iaW5lZF9jYW5keSkKYGBgCgojIyBheGUgYWxsIHRoZSByb3dzIHRoYXQgYXJlIG5vdCBhYm91dCBjYW5keSAtIHdvdWxkIGdpdmUgYW4gYWNjdXJhdGUgY291bnQgb2YgY2FuZHkgcmF0aW5ncwoKYGBge3J9Cm5hbWVzKGNvbWJpbmVkX2NhbmR5KQoKc3BlY2lmaWNfY2FuZHlfZGF0YSA8LSBzZWxlY3QoY29tYmluZWRfY2FuZHksIC0xOCwgLTMzLCAtMzgsIC00MSwgLTQ1LCAtNTYsIC02MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTg4LCAtOTM6LTk1LCAtOTc6LTExMiwgLTExOSwgLTEzMCwgLTEzNzotMTM5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTQ1LCAtMTQ4Oi0xNTYpCgpuYW1lcyhzcGVjaWZpY19jYW5keV9kYXRhKQoKIyMgYnJpbmcgYWxsIG5vbi1jYW5keSBkYXRhIHRvIGJlZ2lubmluZwoKc3BlY2lmaWNfY2FuZHlfZGF0YSA8LSBzcGVjaWZpY19jYW5keV9kYXRhICU+JSAKICBzZWxlY3QodGltZXN0YW1wOmdvaW5nX291dCwgZGF5OndoaWNoX3N0YXRlX3Byb3ZpbmNlX2NvdW50eV9kb195b3VfbGl2ZV9pbiwKICAgICAgICAgaW50ZXJuYWxfaWQ6c3RhdGUsIGV2ZXJ5dGhpbmcoKSkKCiMjIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGludGVybmFsX2lkIGFuZCB0aW1lc3RhbXAgdG8ganVzdCB0aGUgeWVhcgoKCnNwZWNpZmljX2NhbmR5X2RhdGEgPC0gc3BlY2lmaWNfY2FuZHlfZGF0YSAlPiUgCiAgbXV0YXRlKHRpbWVzdGFtcCA9IGFzLmNoYXJhY3Rlcih0aW1lc3RhbXApKSAlPiUgCiAgbXV0YXRlKHRpbWVzdGFtcCA9IGlmX2Vsc2Uoc3RyX2RldGVjdCh0aW1lc3RhbXAsICIyMDE1LSsiKSwgIjIwMTUiLCAiMjAxNiIpKQoKIyBub3Qgc3VyZSBJIG5lZWQgdGhpcz8gCnNwZWNpZmljX2NhbmR5X2RhdGEgJT4lIAogIHJlbmFtZSh5ZWFyID0gInRpbWVzdGFtcCIpCgpzcGVjaWZpY19jYW5keV9kYXRhIDwtIHNwZWNpZmljX2NhbmR5X2RhdGEgJT4lIAogIG11dGF0ZShpbnRlcm5hbF9pZCA9IGFzLmNoYXJhY3RlcihpbnRlcm5hbF9pZCkpIAoKc3BlY2lmaWNfY2FuZHlfZGF0YSA8LSBzcGVjaWZpY19jYW5keV9kYXRhICU+JSAKICBtdXRhdGUoaW50ZXJuYWxfaWQgPSBpZl9lbHNlKHN0cl9kZXRlY3QoaW50ZXJuYWxfaWQsICI5MCsiKSwgIjIwMTciLCAiTk8gWUVBUiIpKQoKCgojIyBtZXJnZSB0aW1lc3RhbXAgYW5kIGludGVybmFsX2lkIHRvIGNyZWF0ZSBhIHllYXIgY29sdW1uCgpzcGVjaWZpY19jYW5keV9kYXRhIDwtICBzcGVjaWZpY19jYW5keV9kYXRhICU+JSAKICB1bml0ZSgieWVhciIsIHRpbWVzdGFtcCwgaW50ZXJuYWxfaWQsIG5hLnJtID0gVFJVRSkgJT4lCiAgbXV0YXRlKHllYXIgPSBuYV9pZih5ZWFyLCAiIikpCiMjIGRvbnQgdGhpbmsgaSBuZWVkIHRoaXMgYml0IG5vdwogIG11dGF0ZSh5ZWFyID0gcmVjb2RlKHllYXIsICIyMDE1X05BIiA9ICIyMDE1IiwgIjIwMTZfTkEiID0gIjIwMTYiLCAiMjAxN19OQSIgPSAiMjAxNyIpKQoKIyMjIyBORUVEIFRPIEZJWCB5ZWFyIHRvIG5vdCBpbmNsdWRlIE5BXzIwMTcgIyMjIwoKIyMgbWVyZ2Ugc3RhdGUgd2l0aCB3aGljaCBzdGF0ZS4uLiAKCnNwZWNpZmljX2NhbmR5X2RhdGEgPC0gIHNwZWNpZmljX2NhbmR5X2RhdGEgJT4lIAogIHVuaXRlKCJzdGF0ZV9jb3VudHkiLCBzdGF0ZSwgd2hpY2hfc3RhdGVfcHJvdmluY2VfY291bnR5X2RvX3lvdV9saXZlX2luLCBuYS5ybSA9IFRSVUUpICU+JSAKICBtdXRhdGUoc3RhdGVfY291bnR5ID0gbmFfaWYoc3RhdGVfY291bnR5LCAiIikpCgpzcGVjaWZpY19jYW5keV9kYXRhCmBgYAoKCiMjIGNsZWFuIHRoZSBhZ2UgY29sdW1uCgoKYGBge3J9CnNwZWNpZmljX2NhbmR5X2RhdGEgPC0gc3BlY2lmaWNfY2FuZHlfZGF0YSAlPiUgCiAgbXV0YXRlKGFnZSA9IHN0cl9yZXBsYWNlX2FsbChhZ2UsICJcXC5bMC05XVthLXpBLVpdWzAtOV0iLCAiIiksCiAgICAgICAgIGFnZSA9IHN0cl9yZXBsYWNlX2FsbChhZ2UsICJbQS1aYS16XStbQS1aYS16XSIsICIiKSwKICAgICAgICAgYWdlID0gc3RyX3JlcGxhY2VfYWxsKGFnZSwgIls6cHVuY3Q6XVswLTldIiwgIiIpLAogICAgICAgICAjIGRlbGV0ZWQgdGhpcyAtIGRvbnQgdGhpbmsgSSBuZWVkIGl0IGlmIEkgcHV0IGEgPyBpbiBmcm9udCBvZiBbMC05XSBhYm92ZQogICAgICAgICBhZ2UgPSBzdHJfcmVwbGFjZV9hbGwoYWdlLCAiWzpwdW5jdDpdIiwgIiIpLAogICAgICAgICBhZ2UgPSBzdHJfcmVwbGFjZV9hbGwoYWdlLCAiLi4uIiwgIiIpLAogICAgICAgICAjIHJlbW92ZWQgdGhpcyAtIGRvbnQgdGhpbmsgaXQgZG9lcyBhbnl0aGluZy4uLiAKICAgICAgICAgYWdlID0gc3RyX3JlcGxhY2VfYWxsKGFnZSwgIlthLXotQS1aXSIsICIiKSwKICAgICAgICAgYWdlID0gbmFfaWYoYWdlLCAiMCIpKQoKCiMgY2xlYW5lZCBjb3VudHJ5IGRhdGEKCmZpbmFsX2NhbmR5IDwtIHNwZWNpZmljX2NhbmR5X2RhdGEgJT4lIAogICBtdXRhdGUoY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCAiWzpwdW5jdDpdIiwgIiIpLAogICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksICJbMC05XSsiLCAiIiksCiAgICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgIlt1VV1bc1NdW2FBXT8gKlthQS16Wl0/IiwgIlVTQSIpLAogICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksICJbdVVdW25OXWk/dD9lZD9zPyBbc1NddD9hP3Q/ZT9zPyIsICJVU0EiKSwKICAgICAgICAgY291bnRyeSA9IGlmX2Vsc2Uoc3RyX2RldGVjdChjb3VudHJ5LCAiXlt1VV1bc1NdW2FBXSIpLCAiVVNBIiwgY291bnRyeSksCiAgICAgICAgIGNvdW50cnkgPSBpZl9lbHNlKHN0cl9kZXRlY3QoY291bnRyeSwgIlt1VV1bc1NdW2FBXSQiKSwgIlVTQSIsIGNvdW50cnkpLAogICAgICAgICBjb3VudHJ5ID0gc3RyX3JlcGxhY2VfYWxsKGNvdW50cnksICJbY0NdW2FBXVtuTl1bYUFdP1tkRF0/W2FBXT9bZUVdPytgPyIsICJDYW5hZGEiKSwKICAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCAiW3VVXVtuTl1baUldW3RUXVtlRV1bZERdICtba0tdW2lJXVtuTl1bZ0ddP1tkRF1bb09dW21NXSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVLIiksCiAgICAgICAgIGNvdW50cnkgPSBzdHJfcmVwbGFjZV9hbGwoY291bnRyeSwgIltlRV1uZD9nP2xhbmQiLCAiVUsiKSwKICAgICAgICAgY291bnRyeSA9IHN0cl9yZXBsYWNlX2FsbChjb3VudHJ5LCAiW3VVXVtrS10iLCAiVUsiKSwKICAgICAgICAgY291bnRyeSA9IHJlY29kZShjb3VudHJ5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVyaWNhIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNBIFVTQSIgPSAiVVNBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIFlvbyBFc3Mgb2YgQWFheXl5eXl5IiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNBIG9mIEFtZXJpY2EiID0gIlVTQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICJVU0FBIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNBU0EgVVNBIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGJlc3Qgb25lIFVTQSIgPSAiVVNBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNBIHRoaW5rIGJ1dCBpdHMgYW4gZWxlY3Rpb24geWVhciBzbyB3aG8gY2FuIHJlYWxseSB0ZWxsIiA9ICJVU0EiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJBbWVyaWNhIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5pdHMgU3RhdGVzIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNBU0EiID0gIlVTQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICJTdWJDYW5hZGlhbiBOb3J0aCBBbWVyaWNhIE1lcmljYSIgPSAiVVNBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyaWNhIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJ1bXBpc3RhbiIgPSAiVVNBIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlVTQXRlcyIgPSAiVVNBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYW1lcmljYSIgPSAiVVNBIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlVTQVNBIFVTQVNBIiA9ICJVU0EiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiID0gIlVTQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBVU0Egb2YgQW1lcmljYSIgPSAiVVNBIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaGluZ2VkIHN0YXRlcyIgPSAiVVNBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiVSBTIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9ydGggQ2Fyb2xpbmEiID0gIlVTQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICJQaXR0c2J1cmdoIiA9ICJVU0EiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJOZXcgWW9yayIgPSAiVVNBIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGlmb3JuaWEiID0gIlVTQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICJOZXcgSmVyc2V5IiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxhc2thIiA9ICJVU0EiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAidSBzIGEiID0gIlVTQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkFoZW1BbWVyY2EiID0gIlVTQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1YkNhbmFkYWlhbiBOb3J0aCBBbWVyaWNhIE1lcmljYSIgPSAiVVNBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90IHRoZSBVU0FyIENhbmFkYSIgPSAiQ2FuYWRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NvdGxhbmQiID0gIlVLIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAibXVycmlrYSIgPSAiVVNBIiksCiAgICAgICAgIGNvdW50cnkgPSBpZl9lbHNlKGNvdW50cnkgPT0gYygiVVNBIiwgIlVLIiwgIkNhbmFkYSIpLCBjb3VudHJ5LCAiT3RoZXIiKQogICAgICAgICApCgpmaW5hbF9jYW5keQoKYGBgCgoKIyMgY2xlYW4gdGhlIGNvdW50cnkgY29sdW1uCgpgYGB7cn0Kc3BlY2lmaWNfY2FuZHlfZGF0YSAlPiUgCiAgZGlzdGluY3QoY291bnRyeSkKYGBgCgoKCiMjIGNvdW50IGFsbCBzd2VldCByYXRpbmdzL3Jldmlld3MKCi0gZG8gdGhpcyBieSBzdW1tYXJpc2UgYWNyb3NzIHRoZSBjb2x1bW5zIHlvdSB3YW50LiA=